<?php
/**
 * 统一路径格式
 *
 * @param string $path
 * @return string
 */
function dir_path($path)
{
	$path = str_replace('\\', '/', $path);
	if(substr($path, -1) != '/') $path = $path.'/';
	return $path;
}
/**
 * 创建目录
 *
 * @param string $path
 * @return string
 */
function dir_create($path, $mode = 0777)
{
	if(is_dir($path)) return TRUE;
	$path = dir_path($path);
	$temp = explode('/', $path);
	$cur_dir = '';
	$max = count($temp) - 1;
	for($i=0; $i<$max; $i++)
	{
		$cur_dir .= $temp[$i].'/';
		if(is_dir($cur_dir)) continue;
		@mkdir($cur_dir);
		@chmod($cur_dir, 0777);
	}
	return is_dir($path);
}

/**
 * 递归拷贝目录
 * @author menghao
 * @param<string> $from 源地址
 * @param<string> $to 目标地址
 * return boolean
 */
function copy_dirs($source, $destination)
{
    if (!is_dir($source))
    {
        throw new Exception($source.' is not a folder');
    }

    if (!is_dir($destination))
    {
        dir_create($destination, 0777);
    }
    $handle = dir($source);

    while ($entry = $handle->read())
    {
        //跳过隐藏目录
        if (($entry != ".") && ($entry != "..") && ($entry[0] != "."))
        {
            if (is_dir($source . "/" . $entry))
            {
                copy_dirs($source . "/" . $entry, $destination . "/" . $entry);
            }
            else
            {
                copy($source . "/" . $entry, $destination . "/" . $entry);
            }
        }
    }
    return true;
}


function file_copy($from, $to)
{
    if(!file_exists($from))
    {
        throw new Exception('文件不存在：' . $from);
    }
    $to_path = dirname($to);
    dir_create($to_path);
    return copy($from, $to);
}
/**
 * 递归的删除目录以及目录下的所有子目录和文件
 *
 * @param string $dir
 * @return boolean
 */
function dir_delete($dir)
{
	$dir = dir_path($dir);
	if(!is_dir($dir)) return FALSE;
	$list = glob($dir.'*');
	foreach($list as $v)
	{
		is_dir($v) ? dir_delete($v) : @unlink($v);
	}
    return rmdir($dir);
}
/**
 * 文件扩展名
 *
 * @param string $filename
 * @return string
 */
function fileext($filename)
{
	$ext = strrchr($filename, '.');
	return strtolower(trim(substr(strrchr($filename, '.'), 1, strlen($ext)-1)));
}


/**
 * 递归的获得目录下的所有文件
 *
 * @param string $more_key
 * @param string $dir
 * @param array $list
 * @return bool
 */
function get_file_list($dir, &$rlist)
{
	if(substr($dir,-1)!="/")
	{
		$dir .= "/";
	}
	if (is_dir($dir))   //是否是目录
	{
		if ($dh = opendir($dir))   //打开目录
		{
			while (($file = readdir($dh))) //获得目录下的目录和文件
			{
				if($file == "." || $file == "..")
				{
					continue;
				}
				if(is_dir($dir.$file))  //如果是目录，递归  //如果是目录，继续查找
				{
					get_file_list($dir.$file."/", $rlist);
				}
				elseif (is_file($dir.$file) && file_exists($dir.$file)) //如果是文件，记录文件
				{
					$rlist[] = $dir.$file;
				}
				else 
				{
					continue;
				}
			}
			closedir($dh);
		}
		else
		{
			return false;
		}
	}
	else 
	{
		return false;
	}
	return true;
}

/**
 * 读取文件内容
 *
 * @param unknown_type $file
 * @return unknown
 */
function read_file($file)
{
	$content = file_get_contents($file);
	return $content;
}

/**
 * 向指定文件写入内容
 *
 * @param 文件地址 $file
 * @param 要写入的内容 $str
 * @param 写入方式 $flag  a为追加写 w为覆盖写
 * @return bool
 */
function write_file($file, $str, $flag="a")
{
	if(!file_exists($file) || !is_file($file))
	{
		$path_parts = pathinfo($file);
		if(!is_dir($path_parts['dirname']))
		{
			if (dir_create($path_parts['dirname'], 755) === false)
			{
				return false;
			}
		}
	}
	$fp = fopen($file, $flag);
	$res = fwrite($fp, $str);
	fclose($fp);
	return $res;
}
?>
